using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Look.Imagem.Entidades;

namespace MakeIT.Look.Imagem.Negocios
{
	public partial class LookDAOT : DAOT
	{

		public ColaboradorVO getColaborador(int? idColaborador, string colaborador)
		{
			ColaboradorVO colaboradorVO = null;
			List<ColaboradorVO> listColaboradorVOs = getColaboradors(idColaborador, colaborador);
			if (listColaboradorVOs != null && listColaboradorVOs.Count > 0)
			{
				colaboradorVO = listColaboradorVOs[0];
			}
			return colaboradorVO;
		}

		public ColaboradorVO getColaborador(int? idColaborador)
		{
			return getColaborador(idColaborador, null);
		}

		public List<ColaboradorVO> getColaboradors()
		{
			return getColaboradors(null, null);
		}

		public List<ColaboradorVO> getColaboradors(int? idColaborador)
		{
			return getColaboradors(idColaborador, null);
		}

		public List<ColaboradorVO> getColaboradors(int? idColaborador, string colaborador)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT col.idColaborador as col_idColaborador, col.colaborador as col_colaborador, col.descricao as col_descricao, col.fotoMime as col_fotoMime, col.fotoNome as col_fotoNome , col.ativo as col_ativo, col.cadastro as col_cadastro, col.cadastradoPor as col_cadastradoPor, col.edicao as col_edicao, col.editadoPor as col_editadoPor  ");
			query.AppendLine("FROM colaborador as col ");
			if (idColaborador != null)
			{
				query.AppendLine(where + "col.idColaborador=@idColaborador ");
				where = "AND ";
			}
			if (colaborador != null)
			{
				query.AppendLine(where + "col.colaborador LIKE @colaborador ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY col.colaborador ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idColaborador!= null) cmd.Parameters.Add(getParameter(cmd, "@idColaborador", idColaborador));
			if (colaborador!= null) cmd.Parameters.Add(getParameter(cmd, "@colaborador", "%"+colaborador+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<ColaboradorVO> listColaborador = new List<ColaboradorVO>();

				while (reader.Read())
				{
					ColaboradorVO colaboradorVO = ColaboradorVO.CreateVO();
					colaboradorVO.idColaborador = reader.GetInt32(reader.GetOrdinal("col_idColaborador"));
					colaboradorVO.colaborador = reader.GetString(reader.GetOrdinal("col_colaborador"));
					if (!reader.IsDBNull(reader.GetOrdinal("col_descricao")))
						colaboradorVO.descricao = reader.GetString(reader.GetOrdinal("col_descricao"));
					if (!reader.IsDBNull(reader.GetOrdinal("col_fotoMime")))
						colaboradorVO.fotoMime = reader.GetString(reader.GetOrdinal("col_fotoMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("col_fotoNome")))
						colaboradorVO.fotoNome = reader.GetString(reader.GetOrdinal("col_fotoNome"));
					colaboradorVO.ativo = reader.GetString(reader.GetOrdinal("col_ativo")).Equals("S");
					colaboradorVO.cadastro = reader.GetDateTime(reader.GetOrdinal("col_cadastro"));
					colaboradorVO.cadastradoPor = reader.GetString(reader.GetOrdinal("col_cadastradoPor"));
					colaboradorVO.edicao = reader.GetDateTime(reader.GetOrdinal("col_edicao"));
					colaboradorVO.editadoPor = reader.GetString(reader.GetOrdinal("col_editadoPor"));


					listColaborador.Add(colaboradorVO);
				}
				reader.Close();
				return listColaborador;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setColaborador(ColaboradorVO colaboradorVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE colaborador ");
			query.AppendLine("SET colaborador=@colaborador, descricao=@descricao, fotoMime=@fotoMime, fotoNome=@fotoNome, ativo=@ativo,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idColaborador=@idColaborador ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idColaborador", colaboradorVO.idColaborador));
			cmd.Parameters.Add(getParameter(cmd, "@colaborador", colaboradorVO.colaborador));
			if (colaboradorVO.descricao == null)
				cmd.Parameters.Add(getParameter(cmd, "@descricao", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@descricao", colaboradorVO.descricao));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", colaboradorVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", colaboradorVO.fotoNome));
			cmd.Parameters.Add(getParameter(cmd, "@ativo", (colaboradorVO.ativo==null?" ":(colaboradorVO.ativo.Value?"S":"N"))));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", colaboradorVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", colaboradorVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", colaboradorVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", colaboradorVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newColaborador(ColaboradorVO colaboradorVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO colaborador ");
			query.AppendLine("  ( colaborador, descricao, fotoMime, fotoNome, ativo, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @colaborador, @descricao, @fotoMime, @fotoNome, @ativo, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@colaborador", colaboradorVO.colaborador));
			if (colaboradorVO.descricao == null)
				cmd.Parameters.Add(getParameter(cmd, "@descricao", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@descricao", colaboradorVO.descricao));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", colaboradorVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", colaboradorVO.fotoNome));
			cmd.Parameters.Add(getParameter(cmd, "@ativo", (colaboradorVO.ativo==null?" ":(colaboradorVO.ativo.Value?"S":"N"))));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", colaboradorVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", colaboradorVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", colaboradorVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", colaboradorVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('colaborador') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delColaborador(ColaboradorVO colaboradorVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM colaborador ");
			query.AppendLine("WHERE idColaborador=@idColaborador ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idColaborador", colaboradorVO.idColaborador));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
		public void setColaboradorFoto(ColaboradorVO colaboradorVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE colaborador ");
			query.AppendLine("SET foto=@foto, fotoMime=@fotoMime, fotoNome=@fotoNome ");
			query.AppendLine("WHERE idColaborador=@idColaborador ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idColaborador", colaboradorVO.idColaborador));

			cmd.Parameters.Add(getParameter(cmd, "@foto", colaboradorVO.foto));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", colaboradorVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", colaboradorVO.fotoNome));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public void getColaboradorFoto(ColaboradorVO colaboradorVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT foto as col_foto, fotoMime as col_fotoMime, fotoNome as col_fotoNome ");
			query.AppendLine("FROM colaborador ");
			query.AppendLine("WHERE idColaborador=@idColaborador ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idColaborador", colaboradorVO.idColaborador));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				if (reader.Read())
				{
					colaboradorVO.foto = getBytesFromBlob(reader, "col_foto");

					if (!reader.IsDBNull(reader.GetOrdinal("col_fotoMime")))
						colaboradorVO.fotoMime = reader.GetString(reader.GetOrdinal("col_fotoMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("col_fotoNome")))
						colaboradorVO.fotoNome = reader.GetString(reader.GetOrdinal("col_fotoNome"));

				}
				reader.Close();
				return;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

	}
}
